#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;


int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    int n = 0;
    cin>>n;
    vector<int>v(n);

    for (int i = 0;i < n;i++)    
    {
        cin>>v[i];
    }

    // 预处理部分:如果长度小于2应该直接返回长度，因为两个肯定能接上
    // up和down分别表示当前向上的子序列，与当前向下的子序列分别的最大值
    // 也就是最新的往上走子列长度，和往下走子列长度
    // 然后up = down + 1
    // 以及down = up + 1
    // 意思是新的累加出的最新长度只能累计在相反趋势的子列上，但是我们用长度来间接代表子列
    // 最后要返回最大值，也就是"新加出来的那个,值"
    // 因为当一个序列只有上坡时，由于两个变量只能通过对方进行加加，
    // 但是由于只能上坡，因此只有up变量才有机会加加
    int up ,down = 1;
    for (int i = 1;i < n;i++)
    {
        if (v[i]-v[i-1] > 0)
        {
            up = down+1;
        }
        if (v[i]-v[i-1] < 0)
        {
            down = up+1;
        }
    }

    cout<<max(up,down)<<"\n";
    return 0;
}